Computer systems for storing data in non-volatile form may include a plurality of storage devices, such as magnetic hard disk drives (“disk drives”), arranged in an array such that increased storage capacity and data redundancy may be achieved. Redundant storage devices are often provided to enhance the integrity of data maintained on a storage system in the event of a failure of a storage device in the system. For example, RAID (“Redundant Array of Inexpensive Disks”) technology utilizes an array of disk drives which can contain data and parity information distributed across each disk drive in the array. The parity information is additional information stored on the disks which can be used to reconstruct data contained on any of the disk drives in the array in the event of a single disk drive failure. In this manner, these RAID disk arrays can improve the data integrity of the storage system by providing for data recovery despite the failure of a disk drive.
In some RAID storage systems, such as, for example, the StorEdge (TM) T3 Array by Sun Microsystems, Inc., when a new unit of data is received by the RAID controller, the new unit of data is divided into smaller sub-units. An exclusive-OR (XOR) operation is performed on each of those sub-units by an XOR accumulator engine, thereby generating a RAID parity sub-unit, which is then stored in the storage array to provide redundancy for the data in the smaller sub-units.
It has been known to use a RAID system in which each sub-unit is divided into 8-bit bytes of data, and these 8-bit bytes of data are passed into a hardware-based XOR engine for XOR processing. During the XOR processing, a 1-bit parity value is attached to each 8-bit byte of data. After the XOR processing is completed, the 1-bit parity value is then used to check whether any of the bits in the 8-bit byte of data has been corrupted. In the event that the 1-bit parity value does not match the 8-bit byte of data, the data may be recovered from a redundant controller memory or, if no redundant controller memory is available, the parity error may cause the system to crash. The use of parity alone to protect data being processed in an XOR engine can be problematic. First, single bit errors can only be identified but not corrected. In addition, the parity check may not catch double bit errors in the data. (Note that this 1-bit parity value is different from the parity sub-unit described above and is only used as a check bit for the XOR processing.)